package com.mapfinal.server.api.web;

import com.jfinal.aop.Clear;
import com.jfinal.kit.StrKit;
import com.lambkit.common.util.StringUtils;
import com.lambkit.web.controller.LambkitController;
import com.mapfinal.server.api.ApiTokenManager;
import com.mapfinal.server.api.model.MfApp;
import com.mapfinal.server.web.WebResult;
import com.mapfinal.server.web.WebResultConsts;

public class ApiTokenController extends LambkitController {

	public void index() {
		renderText("Welcome to Mapfinal Server.");
	}
	
	public void alive() {
		renderJson(WebResult.json(WebResultConsts.SUCCESS));
	}
	/**
	 * 使用appId+appSecret 生成AccessToken
	 */
	@Clear
	public void token() {
		String appId = getPara("appid");
		String appSecret = getPara("appsecret");
		
		// 使用appId + appSecret查询
		MfApp appResult = MfApp.service().getApp(appId, appSecret);
        // 判断是否存在商户信息，等同与微信开发平台申请的appid，appSecret信息是否正确
        if (appResult == null) {
        	//"没有对应机构的认证信息"
            WebResult.render(this, WebResultConsts.APP_NONE);
            return;
        }
        //判断是否开发权限给该商户
        int isFlag = appResult.getStatus();
        if (isFlag == 1) {
        	//"您现在没有权限生成对应的AccessToken"
            WebResult.render(this, WebResultConsts.APP_NONE_ACCESS);
            return;
        }
        String accessToken = ApiTokenManager.me().getToken(appResult);
        if(StrKit.notBlank(accessToken)) {
        	WebResult.render(this, WebResultConsts.SUCCESS, "accessToken", accessToken);
        } else {
        	WebResult.render(this, WebResultConsts.FAILED, "accessToken", null);
        }
	}
	
	@Clear
	public void validate() {
		String accessToken = getPara("tk", getPara("token", getPara("accessToken")));
		// 判断accessToken是否空
        if (StringUtils.isBlank(accessToken)) {
            // 返回错误消息
        	WebResult.render(this, WebResultConsts.EMPTY_TOKEN, null);
            return;
        }
		if(ApiTokenManager.me().validation(accessToken)) {
			WebResult.render(this, WebResultConsts.SUCCESS, null);
		} else {
			// accessToken 已经失效!
			WebResult.render(this, WebResultConsts.INVALID_TOKEN, null);
		}
	}
}
